package com.twq.rules

/**
 * Created by tangweiqun on 2017/11/18.
 * 作用域就是一个词法边界(lexical boundary)，而绑定(标志符)在作用域中才有效
 * 一般一个作用域可以用{}来表达
 */


object Scope {
  def main(args: Array[String]): Unit = {
    //1、scala中的作用域是可以嵌套的
    class Foo(x: Int) {
      def tmp: Unit = {
        val x = 2 //这个变量x遮挡了Foo构造器中的x，这个绑定的优先级较高
        x
      }
    }

    //1、绑定的优先级
    testWildcardImport

    //通过通配符导入的绑定的优先级比显示导入的要低
    testExplicitImport

    //本地声明的变量的优先级是最高的
    testInlineDefinition

  }

  def testWildcardImport(): Unit = {
    println("-----------testWildcardImport------------")
    import Wildcard._
    println(x)
  }

  def testExplicitImport(): Unit = {
    println("-----------testExplicitImport------------")
    import Explicit.x //优先级比通配符导入要高
    import Wildcard._
    println(x)
  }

  def testInlineDefinition(): Unit = {
    println("-----------testInlineDefinition------------")
    val x = "Inline definition x"
    import Explicit.x
    import Wildcard._
    println(x)
  }
}


object Wildcard {
  def x = "Wildcard import x"
}

object Explicit {
  def x = "Explicit import x"
}





